package com.universest.swordholder.data

import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase
import android.content.Context
import com.universest.swordholder.data.dao.User
import com.universest.swordholder.data.dao.UserDao


/**
 * 应用数据库类，用于存储与账号无关的用户列表数据
 *
 * 这是一个Room数据库实现，当前版本为1，不导出数据库模式
 */
@Database(entities = [User::class], version = 1, exportSchema = false)
abstract class AppDatabase : RoomDatabase() {

    /**
     * 获取用户数据访问对象
     *
     * @return UserDao实例，用于对用户表进行增删改查操作
     */
    abstract fun userDao(): UserDao

    companion object {
        /**
         * 数据库单例实例，使用@Volatile注解保证多线程可见性
         */
        @Volatile
        private var INSTANCE: AppDatabase? = null

        /**
         * 获取数据库单例实例
         *
         * 使用双重检查锁定模式确保线程安全，避免重复创建数据库实例
         *
         * @param context 应用上下文
         * @return AppDatabase单例实例
         */
        fun getInstance(context: Context): AppDatabase {
            return INSTANCE ?: synchronized(this) {
                if(INSTANCE == null) {
                    // 构建Room数据库实例，指定数据库名称为"sh_public.db"
                    val instance = Room.databaseBuilder(
                        context,
                        AppDatabase::class.java,
                        "sh_public.db"
                    )
                        .build()
                    INSTANCE = instance
                }
                INSTANCE!!
            }
        }
    }
}
